koa2 + mysql
node全栈开发(1)–koa2 链接 mysql 写api
简单尝试了 koa2 来操作数据 写api ,通过postMan测试通过。简单的把主要的几步流程整理出来了
- 1.koa2如何链接sql
- 2.koa2路由使用
结构目录
- routers 路由
- static 静态资源 // 现在暂时用不到
- utils 封装工具函数
- app.js 启动文件
- default.js 配置文件
package.json
- 先npm init 在package.json里填写以下koa的依赖,npm install 运行。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34{
"name": "koa-demo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"koa": "^2.13.1"
},
"devDependencies": {
"chai": "^4.2.0",
"ejs": "^3.1.5",
"koa": "^2.13.1",
"koa-bodyparser": "^4.3.0",
"koa-mysql-session": "^0.0.2",
"koa-router": "^10.0.0",
"koa-session-minimal": "^4.0.0",
"koa-static": "^5.0.0",
"koa-static-cache": "^5.1.4",
"koa-views": "^7.0.0",
"markdown-it": "^12.0.4",
"md5": "^2.3.0",
"mocha": "^8.2.1",
"moment": "^2.29.1",
"mysql": "^2.18.1",
"koa-cors": "0.0.16",
"koa-jwt": "^3.5.1"
}
}
app.js
- 新建启动入口文件app.js代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19//启动文件(入口文件)
const Koa = require('koa')
const bodyParser = require('koa-bodyparser') //上下文解析
const static = require('koa-static') //静态资源服务
const path = require('path')
const cors = require('koa-cors') //跨域访问组件
const registerRouter = require('./routers/index')
const app = new Koa()
// 配置静态资源文件
const staticPath = './static'
app.use(static(
path.join( __dirname, staticPath)
))
app.use(cors()) // 允许跨域访问
app.use(bodyParser()) // body解析
app.use(registerRouter())
app.listen(3000,() =>{
console.log("服务器已启动,http://localhost:3000");
})
mysql 链接
default.js 来配置mysql的链接参数配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15const config = {
// 启动端口
port: 3000,
// 数据库配置
database: {
host:'localhost',
port:'3306',
user:'root',
password:'123456',
database:'myshop'
}
}
module.exports = configutils目录下新建query.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30const config = require('../default').database
const mysql = require('mysql')
const pool = mysql.createPool(config)
const query = function(sql,succCb,errCb){
pool.getConnection(function(err,conn){
if (err) {
let data = {
code:500,
message:"请求失败",
data:err
};
errCb(data);
}else {
conn.query(sql,function(err,result){
if (err) {
let data = {
code:500,
message:"请求失败",
data:err
};
errCb(data);
}else {
succCb(result);
conn.release();
}
})
}
})
}
module.exports = query;
路由
- user.js 登录请求
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39const router = require('koa-router')(); //路由
const query = require('../utils/query');
const jwt = require('jsonwebtoken');
const tbName = 'user';
const preUrl = '/api/users';
function signIn(userName,pwd){
return new Promise((resolve,reject)=>{
query(`select * from ${tbName} where username='${userName}' and userpwd=${pwd}`,function(res){
if (res.length==0) {
resolve({
code:200,
message:'用户名密码错误'
})
}else {
const token = jwt.sign({id:res[0].userid}, 'token', {expiresIn: '15d'})
resolve({
code:200,
message:'登录成功',
data:{
user:res[0],
token:token
}
})
}
},function(err){
resolve({
code:200,
message:'登录失败',
data:err
})
})
})
}
router
.post(`${preUrl}/signIn`,async(ctx,next) =>{ //登录
let data = await signIn(ctx.request.body.userName,ctx.request.body.password);
ctx.body = data;
})
module.exports = router
-routers/index.js
当我们路由文件很多,不可能一个一个import,多累啊,万一漏了那个呢?麻烦。
所以还是利用glob和koa-compose来聚合一下我们routers文件夹下面的的所有路由文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17// routers/index.js
const compose = require('koa-compose')
const glob = require('glob')
const { resolve } = require('path')
registerRouter = () => {
let routers = [];
glob.sync(resolve(__dirname, './', '**/*.js'))
.filter(value => (value.indexOf('index.js') === -1))
.map(router => {
routers.push(require(router).routes())
routers.push(require(router).allowedMethods())
})
return compose(routers)
}
module.exports = registerRouter
最后在主启动文件app.js
const registerRouter = require(‘./routers/index’);
app.use(registerRouter());
即可将全部的路由注册。
mysql 数据库
创建了 myshop 数据库,然后新建user数据表
运行node app.js postMan测试结果如下
demo代码已经上传git,git地址 https://gitee.com/smarterlo/koa-demo.git
原文作者: 小左
原文链接: https://zuobb.cn/2021/01/29/koa + mysql/
版权声明: 转载请注明出处(必须保留作者署名及链接)